Q:
éÑÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÅAÉÜÅ[ÉUÇ™ Command-Q Ç‚ÉAÉvÉäÉPÅ[ÉVÉáÉìÉÅÉjÉÖÅ[ÇégópǵǃèIóπǵÇÊǧÇΔǵÇΩÇΔÇ´Ç…ÅAÇ¢Ç≠ǬǩÇÃèIóπÉAÉNÉVÉáÉìÇé¿çsÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBDZÇÃÇÊǧDžÇ∑ÇÈÇ…ÇÕǫǧÇ∑ÇÍÇŒÇÊÇ¢ÇÃÇ≈ǵÇÂǧǩÅH
A:
Mac OS X ÇÃÇ∑Ç◊ǃÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÉÅÉjÉÖÅ[Ç©ÇÁÅuèIóπÅvÇ™ëIëÇ≥ÇÍÇΩÇΔÇ´ÅAÇ®ÇÊÇ—ÅAìØìôÇà Command-Q ÇÃÉLÅ[ì¸óÕǙdžǡÇΩÇΔÇ´Ç…èIóπÇ∑ÇÈDZÇΔÇ™ä˙ë“Ç≥ÇÍǃǢNjÇ∑ÅBDZÇÃÇÊǧǻóvåèÇñûÇΩÇ∑ÇΩÇflÇ…ÅAMac OS X ÇÃÉOÉâÉtÉBÉJÉãÇ» Java ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ÇÕÇ∑Ç◊ǃÅADZÇÃã@î\Ç™é©ìÆìIÇ…íÒãüÇ≥ÇÍÇ‹Ç∑ÅBÇΩÇæÇµÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃèIóπëOÇ…ÉRÅ[ÉhÇé¿çsÇ∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅBDZÇÍÇçsǧDžÇÕÅAcom.apple.mrj.MRJQuitHandler ÉCÉìÉ^ÉtÉFÅ[ÉXÇé¿ëïÇ∑ÇÈÉNÉâÉXÇÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ìoò^Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBǪÇÃÉNÉâÉXÇÕ handleQuit() ÉÅÉ\ÉbÉhÇÃé¿ëïÇíÒãüǵÅAMRJApplicationUtils.registerQuitHandler() Çégǡǃìoò^ÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
ïœçXÇÃǻǩǡÇΩçÏãΔÇï€ë∂Ç∑ÇÈDžǵÇÎÅAà¿ëSÇÃÇΩÇflÇ…íPÇ…èIóπÉAÉNÉVÉáÉìÇÃé¿çsÇämîFÇ∑ÇÈDžǵÇÎÅAèIóπÇÃëOÇ…ÉÜÅ[ÉUÇ…ämîFÇãÅÇflÇÈèÍçáÇÕÅAhandleQuit() ÇÃíÜÇ©ÇÁÉ_ÉCÉAÉçÉOÇäJÇ≠DZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÉÜÅ[ÉUÇÃâûìöÇ…ÇÊǡǃÅAéüÇÃÇ«ÇøÇÁÇ©ÇçsǧïKóvǙdžÇËÇ‹Ç∑ÅB
System.exit() ÇåƒÇ—èoÇ∑DZÇΔÇ…ÇÊǡǃÉAÉvÉäÉPÅ[ÉVÉáÉìÇèIóπÇ∑ÇÈ
IllegalStateException ÇåƒÇ—èoÇ∑DZÇΔÇ…ÇÊǡǃèIóπèàóùÇíÜé~Ç∑ÇÈ
Mac OS X Çà 10.2 ÇÊÇËëOÇÃÉoÅ[ÉWÉáÉìÇ≈ÇÕ 1 Ǭñ‚ëËǙdžÇËÅAhandleQuit() Ç©ÇÁÉÇÅ[É_ÉãÉ_ÉCÉAÉçÉOÇï\é¶Ç∑ÇÈÇΔÅAMRJQuitHandler ÇΔ MRJAboutHandler ÇÃóºï˚Çìoò^ǵǃÇΩèÍçáÇ…ÉnÉìÉOǵNjÇ∑ÅBà»ëOÇÃÉoÅ[ÉWÉáÉìÇ≈ÇÃâåàçÙÇΔǵǃÇÕÅADZÇÃÉ_ÉCÉAÉçÉOÇï ÇÃÉXÉåÉbÉhÇ≈ï\é¶Ç∑ÇÈÇΔǢǧï˚ñ@ǙdžÇËÇ‹Ç∑ÅB10.2 Ç≈ÇÕDZÇÃÇÊǧǻñ‚ëËÇÕǻǢÇΩÇflÅADZÇÃâåàçÙÇïKóvÇΔǵNjÇπÇÒÅiè⁄ǵÇ≠ÇÕâ∫ãLéQèΔÅjÅB
handleQuit() ÉÅÉ\ÉbÉhÇÕÅAèIóπëOÇ…ÉRÅ[ÉhÇé¿çsÇ∑ÇÈéËíiÇ≈džÇÈDZÇΔÇ…íçñ⁄ǵǃÇ≠ÇæÇ≥Ç¢ÅBhandleQuit() ÇÃé¿çsÇ™äÆóπÇ∑ÇÈÇΔÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕèIóπÇ∑ÇÈÇΔǢǧDZÇΔÇ™ëOíÒÇΔÇ»ÇËÇ‹Ç∑ÅBMRJQuitHandler Çà javadocs Ç…ÇÕÅAèIóπÇíÜé~Ç∑ÇÈÇ…ÇÕÅAIllegalStateException ÇÉXÉçÅ[ÇµÇ»ÇØÇÍnjǻÇÁǻǢÇΔèëÇ©ÇÍǃǢNjÇ∑ÅBDZÇÍÇ…ÇÕÅAè„ãLÇÃâåàçÙÇÃÇÊǧǻÅAï ÇÃÉXÉåÉbÉhÇ≈é¿çsíÜÇÃèàóùÇë“ǬDZÇΔLJä‹Ç‹ÇÍÇ‹Ç∑ÅBDZÇÃÇÊǧDžÅASystem.exit() ÇégópǵǃÉAÉvÉäÉPÅ[ÉVÉáÉìǙǢǬèIóπÇ∑ÇÈÇ©Çê≥ämÇ…êßå‰Ç≈Ç´Ç‹Ç∑ÅBhandleQuit() ÇÃíÜÇ≈ÉNÉäÅ[ÉìÉAÉbÉvÉçÉWÉbÉNÇÃÇ∑Ç◊ǃÇé¿çsǵÅAèIóπÇíÜé~ǵÇΩÇËâÑä˙ǵÇΩÇËÇ∑ÇÈïKóvǙǻǢèÍçáÇÕÅAIllegalStateException ÇÉXÉçÅ[Ç∑ÇÈïKóvLJdžÇËÇ‹ÇπÇÒÅB
â∫ãLÇÃÉRÅ[ÉhÇÕÅAMac OS X 10.1 Ç®ÇÊÇ— 10.2 Ç≈ MRJQuitHandler Çê≥ǵÇ≠é¿ëïǵÅAèIóπÇämîFÇ∑ÇÈÇΩÇflÇ…ÉÜÅ[ÉUÇ…à¿ëSÇ…ämîFÇãÅÇflÇÈÉTÉìÉvÉãÉAÉvÉäÉPÅ[ÉVÉáÉìÇé¶ÇµÇƒÇ¢Ç‹Ç∑ÅBâ∫ãLÇÃó·Ç≈ÇÕÅAèIóπÇíÜé~Ç∑ÇÈÇΩÇflÇ… IllegalStateException Ç™ÉXÉçÅ[Ç≥ÇÍǃǢNjÇ∑Ç™ÅASystem.exit(0) ÇåƒÇ—èoÇ∑Ç◊ǴǩǫǧǩÇåàÇflÇÈÇΩÇflÇ…ÅAï ÇÃÉXÉåÉbÉhÇ≈ÉÜÅ[ÉUÇ™ì¸óÕÇ≈Ç´ÇÈÇÊǧDžǻǡǃǢÇÈDZÇΔÇ…íçñ⁄ǵǃÇ≠ÇæÇ≥Ç¢ÅB
import javax.swing.*;
import java.awt.*;
import com.apple.mrj.*;
public class MRJHandlerTest extends JFrame implements MRJQuitHandler {
public MRJHandlerTest() {
super("TestProject");
getContentPane().add(new JLabel(
"<HTML><CENTER>To test the MRJQuitHandler, " +
"select \"Quit MRJHandlerTest\" " +
"from the application menu.</CENTER></HTML>"));
MRJApplicationUtils.registerQuitHandler(this);
}
public void handleQuit() {
// 2868805 ÇÃâåàçÙÅBï ÇÃÉXÉåÉbÉhÇ≈ÉÇÅ[É_ÉãÉ_ÉCÉAÉçÉOÇï\é¶ÅB
// DZÇÃèàóùÇÕ 10.2 Ç≈ÇÕïsóvÇæÇ™ÅAdžǡǃLJñ‚ëËǻǢÅB
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// É_ÉCÉAÉçÉOÇï\é¶ÇµÅAǪÇÍÇ…âûÇ∂ǃêUÇÈïëǧ
int result = JOptionPane.showConfirmDialog(null,
"Do you really want to quit?",
"Really Quit?",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
if (result == JOptionPane.YES_OPTION) {
System.exit(0);
}
}
});
// êVǵǢÉXÉåÉbÉhÇ™é¿çsÇ≈Ç´ÇÈÇÊǧ IllegalStateException ÇÉXÉçÅ[ÅB10.2 Ç≈ÇÕ
// DZÇÃÉXÉåÉbÉhÇ≈É_ÉCÉAÉçÉOÇï\é¶Ç∑ÇÈèÍçáÇÕÅAJOptionPane.NO_OPTION ÇÃÇΔÇ´Ç…ÉXÉçÅ[
throw new IllegalStateException("Quit Pending User Confirmation");
}
public static void main(String[] args) {
new MRJHandlerTest().setVisible(true);
}
}
|
ÉäÉXÉg 1Å@MRJQuitHandler ÇÃê≥ǵǢégÇ¢ï˚
|
[2002 îN 8 åé 13 ì˙]
|